#include <stdio.h>
#include<iostream>
#include <pthread.h>
#include<string>
#include <unistd.h>
#include"mutex.hpp"

    MutexModule::Mutex mutex;

int ticketnum = 1000;
void *ticket(void*argv)
{
    char* id=(char*)argv;

    while(true)
    {
        //mutex.lock();
        MutexModule::LockGuard lockguard(mutex);
        if(ticketnum > 0)
        {
            usleep(1000);
            std::cout << "ticketnum:" << ticketnum <<"线程id:"<<id<< std::endl;
            ticketnum--;
            //mutex.unlock();
        }
        else
        {
            //mutex.unlock();

            break;
        }
    }
    return nullptr;

}
int main()
{
    pthread_t tid1,tid2,tid3,tid4;


    pthread_create(&tid1,nullptr,ticket,(void*)"tid1");
    pthread_create(&tid2,nullptr,ticket,(void*)"tid2");
    pthread_create(&tid3,nullptr,ticket,(void*)"tid3");
    pthread_create(&tid4,nullptr,ticket,(void*)"tid4");

    pthread_join(tid1,nullptr);
    pthread_join(tid2,nullptr);
    pthread_join(tid3,nullptr);
    pthread_join(tid4,nullptr);

    return 0;
}

// pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

// int ticketnum = 1000;
// void *ticket(void*argv)
// {
//     char* id=(char*)argv;

//     while(true)
//     {
//         pthread_mutex_lock(&mutex);
//         if(ticketnum > 0)
//         {
//             usleep(1000);
//             std::cout << "ticketnum:" << ticketnum <<"线程id:"<<id<< std::endl;
//             ticketnum--;
//             pthread_mutex_unlock(&mutex);
//         }
//         else
//         {
//             pthread_mutex_unlock(&mutex);
//             break;
//         }
//     }
//     return nullptr;

// }
// int main()
// {
//     pthread_t tid1,tid2,tid3,tid4;

//     pthread_create(&tid1,nullptr,ticket,(void*)"tid1");
//     pthread_create(&tid2,nullptr,ticket,(void*)"tid2");
//     pthread_create(&tid3,nullptr,ticket,(void*)"tid3");
//     pthread_create(&tid4,nullptr,ticket,(void*)"tid4");

//     pthread_join(tid1,nullptr);
//     pthread_join(tid2,nullptr);
//     pthread_join(tid3,nullptr);
//     pthread_join(tid4,nullptr);

//     return 0;
// }